package com.itheima.d7_tcp4;

import java.io.DataInputStream;
import java.io.InputStream;
import java.net.Socket;


/**
 * 疑惑：我的理解是，客户端的socket管道也要接收其他客户端的消息，所以也要充当服务端的功能，
 *      所以单独定义了一个线程来处理客户端接收的消息
 *      但是我奇怪的是，这个socket是客户端建立的，并没有和服务端accept一起建立一个双向的socket通信管道吧？
 *      为什么在这个线程里面，可以直接就拿来读取消息？
 *      并且是怎么读取到其他客户端的消息的？
 *      是因为其他客户端访问的服务端端口都是同样的8888有关系吗？
 */
public class ClientReaderThread extends Thread{
    private Socket socket;
    public ClientReaderThread(Socket socket){
        this.socket = socket;
    }
    @Override
    public void run() {
        try {
            InputStream is = socket.getInputStream();
            DataInputStream dis = new DataInputStream(is);
            while (true){
                try {
                    String msg = dis.readUTF();
                    System.out.println(msg);
                } catch (Exception e) {
                    System.out.println("自己下线了：" + socket.getRemoteSocketAddress());
                    dis.close();
                    socket.close();
                    break;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
